/******************************/
/* 描述：工具脚本 */
/* 作者：by 杉木说 */
/* 日期：2023-05-16 */
/******************************/
const fs = require('fs');
const path = require('path');

/**
 * 解密: 对密文和密钥进行异或操作,使用charCodeAt()获取字符的ASCII值
 * 使用String.fromCharCode()将结果转换回字符
 * @param {string} ciphertext 明文
 * @param {string} decryptCode 解密的密钥
 * @returns 
 */
function XORDecrypt(ciphertext, decryptCode) {
    if (decryptCode == null || decryptCode == "") return ciphertext;

    let decryptedText = "";
    let decryptCodeLen = decryptCode.length;
    for (let i = 0; i < ciphertext.length; i++) {
        let decryptedChar = String.fromCharCode(
            ciphertext.charCodeAt(i) ^ decryptCode.charCodeAt(i % decryptCodeLen)
        );
        decryptedText += decryptedChar;
    }
    return decryptedText;
}

/**
 * 检查目录是否存在,如果不存在则创建
 * @param {string} dir 
 */
function checkAndMkDir(dir) {
    if (!fs.existsSync(dir)) {
        let parentDir = path.parse(dir).dir;
        if (!fs.existsSync(parentDir)) {
            checkAndMkDir(parentDir)
        }
        fs.mkdirSync(dir)
    }
}

/**
 * 判断字符串是否是空的
 * @param {string} str 
 * @returns 
 */
function isNullOrEmpty(str) {
    str += "";
    if (str == null || str.trim() == "") {
        return true;
    }
    return false;
}

/**
 * 获取工具的配置文件
 * @returns json格式的
 */
function getToolConfigs() {
    let cfg = fs.readFileSync(path.join(__dirname, "..", "ToolConfig.json"), "utf-8");
    return JSON.parse(cfg);
}

// 导出模块
module.exports = {
    XORDecrypt,
    checkAndMkDir,
    getToolConfigs,
    isNullOrEmpty,
};